/**
 * * 一般的GEET请求，不带参数
* @param {String} url  接口地址
* @param {Function} funSuccess 成功回调
* @param {Function} funComplete 请求结束的回调
*/
function get(url,data, funSuccess, funComplete) {
	uni.showLoading({
		title: '加载中.....',
		mask: false
	});
	uni.request({
		url: url,
		method: 'GET',
		sslVerify: false,
		header: {
			"content-type": "application/json;charset=UTF-8"
		},
		success: res => {
			funSuccess(res.data)
		},
		fail: err => {
			console.log(err);
		},
		complete: () => {
			uni.hideLoading();
			funComplete
		}
	});
}

/**
 *GET请求，需要用传递Header
 *@param {string} url 要请求的接口地址
 *@param {JSON} header 请求头，包含参数，若无参数可以使用get方法
 *@@param {Function} funSuccess 成功回调
 *@param {Function} funComplete  请求结束的回调，如果无需处理则传递一个空方法即可
 */
function getWithHeader(url, header, funSuccess, funComplete) {
	uni.showLoading({
		title: '加载中.....',
		mask: false
	});
	uni.request({
		url,
		header,
		method: 'GET',
		sslVerify: false,
		success: res => {
			funSuccess(res.data)
		},
		fail: err => {
			console.log(err);
		},
		complete: () => {
			uni.hideLoading();
			funComplete()
		}
	});
}
/**
 * @param {string} url
 * @param {JSON} data
 * @param {Function} funSuccess
 * @param {Function} funComplete 
 */
function postParam(url, data, funSuccess,funComplete){
	uni.showLoading({
		title: '提交数据....',
		mask: false
	});
	uni.request({
		url: url,
		header:{
			"Accept":"application/json; q=0.9, */*; q=0.1",
			"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"
		},
		method:'POST',
		sslVerify:false,
		data:data,
		success: res => funSuccess(res.data),
		fail: err => {
			console.log(err);
		},
		complete: () => {
			uni.hideLoading();
			funComplete()
		}
	});
}

/**
* POST请求
 * @param {String} url 要请求的接口地址
 * @param {JSON} data 要提交的数据
 * @param {Function} funSuccess 成功的回调
 * @param {Function} funComplete 请求结束的回调，如果无需处理则传递一个空方法即可
 */
function post(url,data,funSuccess,funComplete){
	uni.showLoading({
		title:"提交数据...",
		mask:false
	});
	uni.request({
		url: url,
		method: 'POST',
		sslVerify:false,
		data: data,
		success: res => {
			funSuccess(res.data)
		},
		fail: err => {
			console.log(err);
		},
		complete: () => {
			uni.hideLoading();
			funComplete
		}
	});
}
/**
 * DELETE请求
 * @param {String} url 要请求的接口地址
 * @param {JSON} data 要提交的数据
 * @param {Function} funSuccess 成功的回调
 * @param {Function} funComplete 请求结束的回调，如果无需处理则传递一个空方法即可
 */
function deleteParams(url,data,funSuccess,funComplete){
	uni.request({  //ureq
		url: url,
		header:{
			"Accept": "application/json; q=0.9, */*; q=0.1",  //品质因子q
			"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
		},
		method: 'DELETE',
		sslVerify:false,
		data: data,
		success: res => funSuccess(res.data),
		fail: err => {
			console.log(err);
		},
		complete: () => {
			funComplete()
		}
	});
}


/**
 * POST提交,上传文件到服务器，可同时提交表单数据
 * @param {String} url 服务器接口地址
 * @param {String} name 文件上传接口参数名，一般为file
 * @param {String} filePath 本地文件
 * @param {JSON} data 其他表单参数如user、password
 * @param {Function} funSuccess 上传成功的回调
 */
function postFile(url,name,filePath,data,funSuccess){
	uni.uploadFile({
		url,
		name,
		filePath,
		formData:data,
		success: (res) =>{
			
		 funSuccess(res)
		 }
	})
}

/**
 * 同步的写法实现异步请求，asyns块内部代码是同步执行的，会等待await代码行的执行结果
 * 如果在lambda表达式内使用，async应该写在匿名函数参数的前面
 */
function requestAsync(url,data={},method='GET') {
	return new Promise((resolve,reject) => {
		uni.request({
			url: url,
			method: method,
			data: data,
			success: res => {
				resolve(res)
			},
			fail: err => {
				reject(err)
			},
			complete: () => {}
		});
	})
}

//导出
module.exports = {
	get,
	getWithHeader,
	postParam,
		post,
		deleteParams,
		postFile,
			requestAsync
}
